#include <vector>
#include <iostream>

using namespace std;

// {2, 3, 5, 6, 8, 9}
//              ^i ^j
// {8, 9}
//  ^i   ^j
vector<int> bubbleSort(vector<int> array) {
  for (int i = 0; i <= array.size() - 2; ++i) {
    for (int j = i + 1; j <= array.size() - 1; ++j) {
      if (array[i] > array[j]) {
        swap(array[i], array[j]);
      }
    }
  }

  return array;
}

// 关于函数参数
// 在 C++ 里，函数默认都会得到一份参数的拷贝
// 当我们给参数前面，添加一个 & 符号的时候
// 表示传递引用，而不进行拷贝
void bubbleSort1(vector<int> &array) {
  // 当我们使用 array 的时候，实际上在使用的是 array 的一份拷贝
  for (int i = 0; i <= array.size() - 2; ++i) {
    for (int j = i + 1; j <= array.size() - 1; ++j) {
      if (array[i] > array[j]) {
        swap(array[i], array[j]);
      }
    }
  }
}

int main(int argc, char const *argv[])
{
  /* code */
  vector<int> v {8, 5, 2, 9, 6, 3};

  bubbleSort1(v);

  for (int n : v) {
    cout<<n<<" ";
  }
  cout<<endl;

  return 0;
}
